<?php

class Planesmejoramiento_Model_Planesmejoramiento extends Model_Cna {
	
	/**
	 * Devuelve un arreglo del listado de Planesmejoramiento
	 * @return array
	 */
	public function getPlanes($datos=array()) {
		$PlanesmejoramientoTable = new Planesmejoramiento_Model_DbTable_Planesmejoramiento();
		return $PlanesmejoramientoTable->getPlanesmejoramiento($datos);
	}
	
	/**
	 * Almacena los datos de un plan de mejoramiento en la base de datos
	 * @param array $datos Los datos de la sede
	 */
	public function guardarPlan($datos) {
		$PlanesmejoramientoTable = new Planesmejoramiento_Model_DbTable_Planesmejoramiento();
		
		if(isset($datos["codplanmejoramiento"]) && !empty($datos["codplanmejoramiento"])) {
			$row = $PlanesmejoramientoTable->find($datos["codplanmejoramiento"])->current();
			$row->setFromArray($datos)->save();
		} else {
			unset($datos["codplanmejoramiento"]);
			return $PlanesmejoramientoTable->createRow($datos)->save();
		}
		
	}
	
	/**
	 * Carga los datos de un plan de mejoramiento
	 * @param int $codplanmejoramiento
	 * @return Array con los datos de la sede
	 */
	public function getPlan($codplanmejoramiento){
		$PlanesmejoramientoTable = new Planesmejoramiento_Model_DbTable_Planesmejoramiento();
		return $PlanesmejoramientoTable->find($codplanmejoramiento)->current()->toArray();
	}
	
	/**
	 * Eliminar plan de mejoramiento
	 * @param $codplanmejoramiento
	 * @return int El número de filas eliminadas
	 */
	public function eliminarPlan($codplanmejoramiento){
		$PlanesmejoramientoTable = new Planesmejoramiento_Model_DbTable_Planesmejoramiento();
		return $PlanesmejoramientoTable->find($codplanmejoramiento)->current()->delete();
	}
	
	
	/**
	 * Almacena los datos de una actividad del plan de mejoramiento
	 * @param array $datos Los datos de la actividad
	 */
	public function guardarActividadPlan($datos) {
	    $datos = $this->forceEmptyAsNull($datos);
		$Table = new Planesmejoramiento_Model_DbTable_Actividadesplan();

		if(isset($datos["codactividad"]) && !empty($datos["codactividad"])) {
			$row = $Table->find($datos["codactividad"])->current();
			return $row->setFromArray($datos)->save();
		} else {
			unset($datos["codactividad"]);
			$key = $Table->createRow($datos)->save();
			return $key;
		}
	}
	
	/**
	 * Obtiene los datos de una actividad
	 * @param Integer $codactividad Código de la actividad
	 * @return Array con los datos de la actividad
	 */
	public function getActividadPlan($codactividad){
	    $Table = new Planesmejoramiento_Model_DbTable_Actividadesplan();
		return $Table->find($codactividad)->current()->toArray();
	}
	
	/**
	 * Obtiene los datos de las actividades del plan de mejoramiento
	 * @param Integer $codplanmejoramiento Código del plan
	 * @return Array con los datos de las actividades
	 */
	public function getActividadesPlan($codplanmejoramiento){
	    $Table = new Planesmejoramiento_Model_DbTable_Actividadesplan();
		return $Table->getActividadesPlan($codplanmejoramiento);
	}
	/**
	 * Obtiene el número de las actividades del plan de mejoramiento
	 * @param Integer $codplanmejoramiento Código del plan
	 * @return Integer Cantidad de las actividades
	 */
	public function getCountActividadesPlan($codplanmejoramiento){
	    $actividades = $this->getActividadesPlan($codplanmejoramiento);
	    return count($actividades);
	}
	
	/**
	 * Elimina una actividad
	 * @param integer $codactividad Código de la actividad
	 */
	
	public function eliminarActividadPlan($codactividad){
	    $Table = new Planesmejoramiento_Model_DbTable_Actividadesplan();
	    return $Table->find($codactividad)->current()->delete();
	}
	
	/**
	 * Elimina el documento adjunto de una activadad del plan
	 * @param integer Código del documento
	 * @return bool
	 */
	public function eliminarAdjuntoActividad($coddocumento) {
        $adjunto = new Generales_Model_Documentos();
	    $adjunto->eliminarDocumento($coddocumento);
	}
	/**
	 * Almacena los datos de un archivo adjunto de una activadad del plan
	 * @param array $datos Los datos para el registro
	 */
	public function guardarAdjuntoActividad($datos) {
		$adjuntoTable = new Generales_Model_DbTable_Documentos();
	    $adjuntoTable->getAdapter()->beginTransaction();
		try {
			$key = $adjuntoTable->createRow($datos)->save();
			$datos_rel["coddocumento"] = $key;
			$datos_rel["codactividad"] = $datos["codactividad"];
			$adjuntoTable->getAdapter()->insert("documentosactividadesplan", $datos_rel);
			$adjuntoTable->getAdapter()->commit();
		} catch(Exception $e) {
			$adjuntoTable->getAdapter()->rollBack();
			throw $e;
		}
	}
	
	/**
	 * Obtiene un array con la lista de documentos adjuntos de una activadad del plan
	 * @param $codactividad Código de la actividad
	 * @return array
	 */
	public function getAdjuntosActividad($codactividad) {
		$Table = new Planesmejoramiento_Model_DbTable_Actividadesplan();
		return $Table->getAdjuntosActividad($codactividad);
	}
	
	
	/**
	 * Almacena los datos de una evidencia a una actividad del plan de mejoramiento
	 * @param array $datos Los datos de la actividad
	 */
	public function guardarEvidenciaActividad($datos) {
	    $datos = $this->forceEmptyAsNull($datos);
		$Table = new Planesmejoramiento_Model_DbTable_Evidenciasactividad();

		if(isset($datos["codevidencia"]) && !empty($datos["codevidencia"])) {
			$row = $Table->find($datos["codevidencia"])->current();
			return $row->setFromArray($datos)->save();
		} else {
			unset($datos["codevidencia"]);
			$key = $Table->createRow($datos)->save();
			return $key;
		}
	}
	
	/**
	 * Obtiene los datos de una evidencia
	 * @param Integer $codevidencia Código de la evidencia
	 * @return Array con los datos de la evidencia
	 */
	public function getEvidenciaActividad($codevidencia){
	    $Table = new Planesmejoramiento_Model_DbTable_Evidenciasactividad();
		return $Table->find($codevidencia)->current()->toArray();
	}
	
	/**
	 * Obtiene los datos de las evidencias de una actividad del plan de mejoramiento
	 * @param Integer $codactividad Código de la actividad
	 * @return Array con los datos de las evidencias
	 */
	public function getEvidenciasActividad($codactividad){
	    $Table = new Planesmejoramiento_Model_DbTable_Evidenciasactividad();
		return $Table->getEvidenciasActividad($codactividad);
	}
	
	/**
	 * Elimina una evidenia
	 * @param integer $codevidencia Código de la evidencia
	 */
	
	public function eliminarEvidenciaActividad($codevidencia){
	    $Table = new Planesmejoramiento_Model_DbTable_Evidenciasactividad();
	    return $Table->find($codevidencia)->current()->delete();
	}
	
	/**
	 * Elimina el documento adjunto de una evidencia de una activadad del plan
	 * @param integer Código del documento
	 * @return bool
	 */
	public function eliminarAdjuntoEvidencia($coddocumento) {
        $adjunto = new Generales_Model_Documentos();
	    $adjunto->eliminarDocumento($coddocumento);
	}
	/**
	 * Almacena los datos de un archivo adjunto de una evidencia de una activadad del plan
	 * @param array $datos Los datos para el registro
	 */
	public function guardarAdjuntoEvidencia($datos) {
		$adjuntoTable = new Generales_Model_DbTable_Documentos();
	    $adjuntoTable->getAdapter()->beginTransaction();
		try {
			$key = $adjuntoTable->createRow($datos)->save();
			$datos_rel["coddocumento"] = $key;
			$datos_rel["codevidencia"] = $datos["codevidencia"];
			$adjuntoTable->getAdapter()->insert("documentosevidencia", $datos_rel);
			$adjuntoTable->getAdapter()->commit();
		} catch(Exception $e) {
			$adjuntoTable->getAdapter()->rollBack();
			throw $e;
		}
	}
	
	/**
	 * Obtiene un array con la lista de documentos adjuntos de una evidencia de una activadad del plan
	 * @param $codevidencia Código de la evidencia
	 * @return array
	 */
	public function getAdjuntosEvidencia($codevidencia) {
		$Table = new Planesmejoramiento_Model_DbTable_Evidenciasactividad();
		return $Table->getAdjuntosEvidencia($codevidencia);
	}
	
}
